export const ArrayPro = function() {
	// 数组原型方法增加
	/**
	 * @param {Object | String} item 参数是要删除的项 支持 对象唯一属性值、整个对象
	 */
	Array.prototype.del = function(item: object | string) {
		switch (typeof item) {
			case 'object':
				let index = this.indexOf(item)
				if (index > -1) {
					this.splice(index, 1)
				}
				break
			case 'string':
				this.forEach((l, index) => {
					Object.keys(l).forEach((i) => {
						if (l[i] == item) {
							this.splice(index, 1)
							return
						} else {
							return false
						}
					})
				})
				break
			default:
				console.log('参数类型错误')
				break
		}
	}
}

export const com = {
	// 公共方法封装
	/**
	  @description 获取星期
	  @param {String | Number} n 参数接受 String or Number 为要获取日期的索引 注：从日开始 日、一、二、三、四、五、六
		@param {String} type 参数接受string，默认值: big 可选值 'big','small','bigs','smalls', 大写日期（big） or 数值 (small) , bigs (返回 周 拼接) , smalls (返回 星期 拼接)
	*/
	getWeek(n: number, type: string = 'big') {
		let weekBig = [ '日', '一', '二', '三', '四', '五', '六' ]
		let weekSmall = [ 0, 1, 2, 3, 4, 5, 6 ]
		switch (type) {
			case 'big':
				return weekBig[n]
			case 'small':
				return weekSmall[n]
			case 'bigs':
				return `周${weekBig[n]}`
			case 'smalls':
				return `星期${weekBig[n]}`
			default:
				console.log('参数类型错误')
				return weekSmall[n]
		}
	},
	/**
	@description 复制方法
	@param {String} text 参数接受string | number, 把内容复制到剪贴板
	@param {String} content 参数接受string | number, 拼接在剪贴板后面的内容
*/
	copy(text: string, content: string | number = '') {
		return new Promise((resolve, reject) => {
			if (navigator.clipboard) {
				navigator.clipboard
					.writeText(text + content)
					.then(() => {
						resolve('成功')
					})
					.catch((error) => {
						//如果用户没有授权，会抛出错误
						reject('未授权')
					})
			} else {
				const save = function(e) {
					e.clipboardData.setData('text/plain', text + content)
					e.preventDefault() // 阻止默认行为
					resolve('成功')
				}
				document.addEventListener('copy', save) // 添加一个copy事件
				document.execCommand('copy') // 执行copy方法
				this.msgSuccess('已复制')
			}
		})
	},
	/**
	@description 姓名脱敏
	@param {String} content 脱敏值
	@param {String} type 脱敏类型 身份证 card | 姓名 name
	 */
	handleName(content: string, type: string = 'name') {
		// 如果是身份证
		if (type == 'card') {
			return content.replace(/^(.{4})(?:\d+)(.{4})$/, '$1**********$2')
		}

		let arr = Array.from(content)
		let result = ''
		if (arr.length === 2) {
			result = arr[0] + '*'
		} else if (arr.length > 2) {
			for (let i = 1; i < arr.length - 1; i++) {
				arr[i] = '*'
			}
			result = arr.join('')
		} else {
			return content
		}
		return result
	},
	/**
	@description 根据身份证获取人员信息，性别、年龄
	@param {String} idCard 身份证号码
	 */
	parseIdCard(idCardNumber) {
		if (idCardNumber.length !== 18) {
			return {
				error: '身份证号长度不正确',
			}
		}

		// 解析生日信息
		const birthYear = parseInt(idCardNumber.substring(6, 10), 10)
		const birthMonth = parseInt(idCardNumber.substring(10, 12), 10)
		const birthDay = parseInt(idCardNumber.substring(12, 14), 10)

		const today = new Date()
		const currentYear = today.getFullYear()
		const currentMonth = today.getMonth() + 1
		const currentDay = today.getDate()

		let age = currentYear - birthYear

		if (birthMonth > currentMonth || (birthMonth === currentMonth && birthDay > currentDay)) {
			age--
		}

		// 解析性别
		const genderDigit = parseInt(idCardNumber.charAt(16), 10)
		const gender = genderDigit % 2 === 0 ? '女' : '男'

		return {
			birthday: `${birthYear}-${birthMonth}-${birthDay}`,
			gender: gender,
			age: age,
		}
	},
	/**
	@description 校验身份证是否合法
	@param {String} idCard 身份证号码
	 */
	isValidIDCard(idCard) {
		// 身份证正则表达式
		var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
		return reg.test(idCard)
	},
}
